package com.yanchi.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.Map;

public class JWTUtil {

    // 自定义签名
    private static final String SIGN = "!@YanChiSign";

    /**
     * 获取token令牌
     * @param claim 传入payload的map集合，此方法只支持String类型。如需其他类型请自行拓展。
     * @return token
     */
    public static String getToken(Map<String, String> claim) {

        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, 7);  // 默认7天过期

        // 创建jwt builder
        JWTCreator.Builder builder = JWT.create();

        // payload -- 把传进来的map放入builder.withClaim()中
        claim.forEach(builder::withClaim);

        return builder.withExpiresAt(calendar.getTime())       // 指定令牌过期时间
                .sign(Algorithm.HMAC256(SIGN));// 指定签名sign

    }

    /**
     * 解析token令牌
     * @param token 传入token字符串
     * @return verify证明
     */
    public static DecodedJWT getVerify(String token) {
        // 解析的签名
        return JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
    }

}
